package cn.tedu.project.oa.sys.role.service.impl;


import cn.tedu.project.oa.base.exception.ServiceException;
import cn.tedu.project.oa.base.response.StatusCode;
import cn.tedu.project.oa.sys.role.mapper.RoleMapper;
import cn.tedu.project.oa.sys.role.pojo.dto.OperaRolePara;
import cn.tedu.project.oa.sys.role.pojo.dto.QueryRolePara;
import cn.tedu.project.oa.sys.role.pojo.entity.Role;
import cn.tedu.project.oa.sys.role.pojo.vo.RoleVO;
import cn.tedu.project.oa.sys.role.service.RoleService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * @Description: 角色业务实现
 * @Author: Miles
 */
@Slf4j
@Service
public class RoleServiceImpl implements RoleService {
    @Autowired
    private RoleMapper roleMapper;

    /**
     * 操作角色业务 (新增/修改)
     *
     * @param rolePara
     */
    @Override
    public void operateRole(OperaRolePara rolePara) {
        log.debug("操作角色业务数据：{}", rolePara);
        Role role = new Role();
        BeanUtils.copyProperties(rolePara, role);
        if (role.getId() == null) {
            // 新增角色
            RoleVO roleName = roleMapper.selectRoleByName(role.getRoleName());
            if (roleName.getRoleName().equals(role.getRoleName())) {
                throw new ServiceException(StatusCode.ROLE_NAME_EXIST);
            }
            role.setCreateTime(new Date());
            log.debug("新增角色：{}", role);
            roleMapper.insertRole(role);
            // TODO 新增角色权限关系以及用户角色关系
        } else {
            // 修改角色
            role.setUpdateTime(new Date());
            log.debug("修改角色：{}", role);
            roleMapper.updateRole(role);
        }
    }

    /**
     * 删除角色业务
     *
     * @param roleId 角色ID
     */
    @Override
    public void deleteRole(Long roleId) {
        log.debug("删除角色业务ID：{}", roleId);
        roleMapper.deleteRoleById(roleId);
        // TODO 删除角色权限关系以及用户角色关系
    }

    /**
     * 查询角色业务
     *
     * @param queryRolePara 查询条件
     * @return 角色列表
     */
    @Override
    public List<RoleVO> queryRoles(QueryRolePara queryRolePara) {
        log.debug("查询角色业务数据：{}", queryRolePara);
        List<RoleVO> roleVOList = roleMapper.selectRole(queryRolePara);
        log.debug("查询角色业务结果：{}", roleVOList);
        return roleVOList;
    }

}
